package com.dvj.demo.rabbiitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * Producer
 * RabbitMQ发送消息
 *
 * @author Dvj
 * @date 2021/6/30 17:53
 */
public class WorkQueuesProducer {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 1.创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();

        // 2.设置参数
        // ip 默认值localhost
        factory.setHost("localhost");
        // 端口 默认值5672
        factory.setPort(5672);
        // 虚拟机 默认值/
        factory.setVirtualHost("/dvj");
        // 用户名 默认值 guest
        factory.setUsername("dvj");
        // 密码 默认值 guest
        factory.setPassword("dvj");

        // 3.创建连接 Connection
        Connection connection = factory.newConnection();

        // 4.创建Channel
        Channel channel = connection.createChannel();

        // 5.创建队列Queue
        /*
        queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
        参数：
             1.queue：队列名称
             2.durable：是否持久化
             3.exclusive：
                 * 是否独占，只能有一个消费者监听该队列
                 * 当Connection关闭时，是否删除该队列
             4.autoDelete：是否自动删除，当没有Consumer时，自动删除
             5.arguments：参数
         */
        // 如果没有一个名字的队列则创建该队列，否则不创建
        channel.queueDeclare("work_queues", true, false, false, null);

        // 6.发送消息
        /*
        basicPublish(String exchange, String routingKey, boolean mandatory, boolean immediate, BasicProperties props, byte[] body)
        参数：
            1.exchange：交换机名称，简单模式下交换机会默认使用 ""
            2.routingKey：路由名称
            3.props：配置信息
            4.body：发送消息数据
         */
        for (int i = 1; i <= 10; i++) {
            String body = "hello rabbitmq!!" + i;
            channel.basicPublish("", "work_queues", null, body.getBytes());
        }

        // 7.释放资源
        channel.close();
        connection.close();
    }
}
